package agencia.test;

import junit.framework.TestCase;
import java.util.Date;
import java.util.Iterator;

import org.junit.Test;

import com.agencia.ws.cliente.VueloWs;

import agencia.ExcursionMedioDia;
import agencia.Hotel;
import agencia.PaquetePersonalizado;
import agencia.PrecioPaquete;
import agencia.ReservaExcursionHotel;
import agencia.ReservaHotelPaquete;
import agencia.PaqueteEstandar;
import agencia.Temporada;
import agencia.exceptions.RangosFechasException;


public class AdministrarPaquetesTuristicos extends TestCase {
	
	public static final String sheraton = new String("Sheraton");
	public static final String sanJuan3276 = new String ("San Juan 3276");
	public static final String argentina = new String ("Argentina");
	public static final String caba = new String ("CABA");
	public static final String telefono = new String ("4444-5555");
	public static final int categoria5 = 5;
	public static final int categoria4 = 4;


	public void testCrearPaqueteEstandar() throws RangosFechasException{
		
		Date fechaSalida = new Date(2008/12/01);
		Hotel hotel = new Hotel(sheraton, sanJuan3276, argentina, caba, telefono, categoria5);
		ExcursionMedioDia excursionMedioDia = new ExcursionMedioDia("Safari",new Date(2008/12/02),5);
		ReservaHotelPaquete hotelPaquete = new ReservaHotelPaquete();
		PrecioPaquete precio = new PrecioPaquete();
		
		PaqueteEstandar paqueteEstandar = new PaqueteEstandar();
		paqueteEstandar.determinarCategoria(categoria5);
		paqueteEstandar.determinarCantidadPasajerosMinima(10);
		paqueteEstandar.determinarFecha(fechaSalida);
		
		paqueteEstandar.determinarTemporada(Temporada.Alta);

		hotelPaquete.determinarHotel(hotel);
		hotelPaquete.determinarFechaCheckIn(fechaSalida);
		
		hotelPaquete.determinarFechaCheckOut(new Date(2008/12/10));
		
		hotelPaquete.agregarExcursion(excursionMedioDia, new Date(2008/12/02));
		paqueteEstandar.agregarHotelPaquete(hotelPaquete);
		
		Iterator<ReservaExcursionHotel> itReservaExcursionHotel = hotelPaquete.getExcursiones().iterator();
		
		while (itReservaExcursionHotel.hasNext()){
		precio.agregarPrecioExcursion(itReservaExcursionHotel.next());
		}
		
		Iterator<ReservaHotelPaquete> itReservaHotelPaquete = paqueteEstandar.getHoteles().iterator();
		while (itReservaHotelPaquete.hasNext()){
			precio.agregarPrecioHotel(itReservaHotelPaquete.next());
		}
		Iterator<VueloWs> itVuelo= paqueteEstandar.getVuelos().iterator();
		while (itVuelo.hasNext()){
			precio.agregarPrecioVuelo(itVuelo.next());
		}
		
		assertEquals((precio.getPrecioExcursiones()+precio.getPrecioHoteles()+precio.getPrecioVuelos()+300), paqueteEstandar.getDeterminarPrecio());
		
	}
	public void testCrearPaquetePersonalizado() throws RangosFechasException{
		
		PaquetePersonalizado paquete = new PaquetePersonalizado();
		Hotel hotel = new Hotel(sheraton, sanJuan3276, argentina, caba, telefono, categoria5);
		ReservaHotelPaquete hotelPaquete = new ReservaHotelPaquete();
		Date fechaSalida = new Date(2008/12/01);
		ExcursionMedioDia excursionMedioDia = new ExcursionMedioDia("Safari",new Date(2008/12/02),5);
		PrecioPaquete precio = new PrecioPaquete();
		
		paquete.determinarFecha(fechaSalida);
		paquete.determinarTemporada(Temporada.Alta);
		paquete.SetCantidadPasajerosMaxima(10);
		hotelPaquete.determinarHotel(hotel);
		hotelPaquete.determinarFechaCheckIn(fechaSalida);
		hotelPaquete.determinarFechaCheckOut(new Date(2008/12/10));
		hotelPaquete.agregarExcursion(excursionMedioDia, new Date(2008/12/02));
		paquete.agregarHotelPaquete(hotelPaquete);
		Iterator<ReservaExcursionHotel> itReservaExcursionHotel = hotelPaquete.getExcursiones().iterator();
		
		while (itReservaExcursionHotel.hasNext()){
		precio.agregarPrecioExcursion(itReservaExcursionHotel.next());
		}
		
		Iterator<ReservaHotelPaquete> itReservaHotelPaquete = paquete.getHoteles().iterator();
		while (itReservaHotelPaquete.hasNext()){
			precio.agregarPrecioHotel(itReservaHotelPaquete.next());
		}
		Iterator<VueloWs> itVuelo = paquete.getVuelos().iterator();
		while (itVuelo.hasNext()){
			precio.agregarPrecioVuelo(itVuelo.next());
		}
		assertEquals((precio.getPrecioExcursiones()+precio.getPrecioHoteles()+precio.getPrecioVuelos()+ 1000/paquete.getCantidadPasajerosMaxima() + 300), paquete.determinarPrecio());
		
		
	}

	@Test(expected=Error.class)	
	public void testFechaDeCheckInMayorACheckOutPaqueteEstandar() throws RangosFechasException{
		
		Date fechaSalida = new Date(2008/12/01);
		Hotel hotel = new Hotel(sheraton, sanJuan3276, argentina, caba, telefono, categoria5);
		ReservaHotelPaquete hotelPaquete = new ReservaHotelPaquete();
		
		PaqueteEstandar paqueteEstandar = new PaqueteEstandar();
		paqueteEstandar.determinarCategoria(categoria5);
		paqueteEstandar.determinarCantidadPasajerosMinima(10);
		paqueteEstandar.determinarFecha(fechaSalida);
		

		hotelPaquete.determinarHotel(hotel);
		hotelPaquete.determinarFechaCheckIn(fechaSalida);
		try{
		hotelPaquete.determinarFechaCheckOut(new Date(2008/11/31));
		fail("Fecha Check Out menor a check in y no se lanzo excepcion");
		}catch (Error e){
			//Ok
		}
		
	}
	public void testDistintasCategoriasPaqueteEstandar() throws RangosFechasException{
		
		Date fechaSalida = new Date(2008/12/01);
		Hotel hotel = new Hotel(sheraton, sanJuan3276, argentina, caba, telefono, categoria5);
		ReservaHotelPaquete hotelPaquete = new ReservaHotelPaquete();
		
		PaqueteEstandar paqueteEstandar = new PaqueteEstandar();
		paqueteEstandar.determinarCategoria(categoria4);	

		hotelPaquete.determinarHotel(hotel);
		hotelPaquete.determinarFechaCheckIn(fechaSalida);
		hotelPaquete.determinarFechaCheckOut(new Date(2008/12/10));
		try{
		paqueteEstandar.agregarHotelPaquete(hotelPaquete);
		fail("Categorias distintas y no se lanzo la excepcion");
		}catch (Error e){
			// Ok
		}
	}
	
}
